PHP 数组
数组是对大量数据进行组织和管理的主要和有效手段之一,许多信息都已数组作为数据的载体,经常需要使用数组进行处理数据。在PHP中,数组主要包含键和值两个参数。
数组的创建与初始化和输出
Array 数组创建
array() 标准数组 (键名、键值)!
1 2 3
| <?php $arrayName = array("ONE" => "one", "TWO" => "two"); ?>
|
array() 键值数组 (键值)!
1 2 3
| <?php $one = array(1,2,3,4); ?>
|
array() 省略键名 (省略键名+键值)!
1 2 3
| <?php $array = array('1' => 2, 2 => 4, 3 => 6,7,8); ?>
|
创建
变量创建数组 (compact)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $a = 10; $b = "one"; $c = array(1,2,3); $array = compact("a","b","c"); print_r($array); ?> </body> </html>
|
两个键值创建一个数组 (array_combine)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array("one","two","three"); $two = array("ONE","TWO","THREE"); $three = array_combine($one, $two); print_r($three); ?> </body> </html>
|
自动建立数组 (arr[n])!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arr[0] = "a"; $arr[1] = "b"; $arr[2] = "c"; print_r($arr); ?> </body> </html>
|
将数组赋值给指定变量 (list)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $one = array("红","白","蓝","橙"); list($one,$two,$three,$four) = $one; echo "$one"; ?> </body> </html>
|
输出
print_r
1 2 3 4 5 6 7 8 9 10 11 12 13
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $array = array('1' => 2, 2 => 4, 3 => 6,7,8); print_r($array); ?> </body> </html>
|
$array[“键名”];
1 2 3 4
| <?php $one = array("蓝" => "蓝色","白" => "白色","红" => "红色","绿" => "绿色"); echo $one["蓝"]; ?>
|
$array[“键值”];
1 2 3 4
| <?php $one = array("红色","蓝色","绿色,","黑色","白色"); echo $one[0]; ?>
|
输出数组中的所有键名 (array_keys) !
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('one' => 1,'two' => 2,'three' => 3); $one = array_keys($arrayName); print_r($one); ?> </body> </html>
|
输出数组中所有的键值 (array_values) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $arrayName = array('one' => 1,'two' => 2,'three' => 3); $one = array_values($arrayName); print_r($one); ?> </body> </html>
|
移除数组中重复的值 (array_unique)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $arrayName = array('one' => 1,'one' => 1,'three' => 3); $one = array_unique($arrayName); print_r($one); ?> </body> </html>
|
键名和键值的操作
检查键值是否存在 (in_array)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('one' => 1,'two' => 2,'three' => 3); if (in_array(1, $arrayName)) { echo "存在键值1"; } else { echo "不存在"; } ?> </body> </html>
|
检查键名是否存在 (!array_key_exists)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('one' => 1,'two' => 2,'three' => 3); if (array_key_exists('one', $arrayName)) { echo "存在键名"; } else { echo "不存在键名"; } ?> </body> </html>
|
检测是否存在 (array_search)!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('one' => 1,'two' => 2,'three' => 3); $key = array_search('1', $arrayName); if ($key == NULL) { echo "数组不存在"; } else { echo "$key"; } ?> </body> </html>
|
array_search与上述方法不同,上述方法如果键值存在则返回true,不存在则返回false,而array_search则是根据键值是否存在,如果键值存在则返回键名,如果不存在则返回NULL
数组的遍历与输出
while 循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array(1,2,3,4,5,6); while (list($key,$value) = each($one)) { echo "$value"; echo "<br>"; } ?> </body> </html>
|
while循环、list和each方法的结合使用可以实现对数组的遍历,list方法重要的作用是将数组中的键值赋值给变量。,each方法主要作用是返回当前的键名和值(并将数组指针移到下一位)
foreach 循环
1 2 3 4 5 6 7 8 9
| <?php $arrayName = array('one' => 'one','two' => 'two'); foreach ($arrayName as $value) { # code... } foreach ($arrayName as $key => $value) { # code... } ?>
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array('one' => 'ONE','two' => 'TWO','three' => 'THREE' ); foreach ($one as $value) { // 输出数组的键值 echo "$value"; echo "<br>"; echo "<br>"; } foreach ($one as $key => $value) { // 输出数组的键名和键值 echo $key. "=>".$value. "<br>"; } ?> </body> </html>
|
function循环时专门用于遍历数组的循环,每次循环的同时,当前单元的值会被付给$value,并且将数组内部的指针向前移动一步.,然后第二次循环和第一次循环一样,只不过当前单元的键名也会在每次循环变量中赋值给 $key
数组的排序
升序
sort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array('a' => 1,'c' => 3,'b' => 2); if (sort($one)) { print_r($one); } ?> </body> </html>
|
sort()函数不仅仅对数组进行了重新排序,同时还删除了原来数组的键名,并重新分配索引。
asort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array('c' => 'cccc', 'd' => 'ddddd','a' => 'aaaaaa','e' => 'eeee'); asort($one); print_r($one); ?> </body> </html>
|
asort()函数与sort()函数不同,数组重新排序后仍然还保持着键名和键值之间的关联,而不像sort()被拆分。
ksort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> </head> <body> <?php $one = array('f' => 'fffff', 'd' => 'dddd','a' => 'aaaa','g' => 'gggg'); ksort($one); print_r($one); ?> </body> </html>
|
ksort()函数与asort()函数一样,对数组的键名进行重新排序,排序后的键名仍然与键值关联。
降序
在PHP中,升序的函数都有一个对应的降序排序,主要是 rsort、arsort、krsort三个,分别对应sort、asort、ksort三个函数:
sort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb'); rsort($arrayName); print_r($arrayName); ?> </body> </html>
|
arsort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb'); arsort($arrayName); print_r($arrayName); ?> </body> </html>
|
krsort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb'); krsort($arrayName); print_r($arrayName); ?> </body> </html>
|
多数组排序
array_multisort()
array_multsiort函数可以一次对多个数组进行排序,或根据多个数组的一个或多个多个数组进行排序,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $one = array(3,5,2,4,1); $two = array(6,7,8,9,10); array_multisort($one,$two); print_r($one); echo "<br>"; print_r($two); ?> </body> </html>
|
数组的重新排序
shuffle()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $one = array(1,20); // 产生有序数组 foreach ($one as $value) echo "$value"; // 输出有序数组 shuffle($one); // 打乱数组顺序 foreach ($one as $value) { echo "$value"; // 输出新的数组顺序 echo "<br>"; } ?> </body> </html>
|
使用shuffle函数可以将数组按照随机的顺序进行排列,并删除原有的键名从而自动建立自动索引。
array_reverse()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $one = array('a' => 1,2,3,4,5); $two = array_reverse($one,TRUE); print_r($two); ?> </body> </html>
|
array_reverse()函数主要作用是将数组按照相反的顺序进行排序。如果array_reverse()函数的参数是TRUE则保留原来的键值,但为FALSE则为数组重新建立索引,而array_reverse()函数默认为FALSE;
自然排序
natsort()
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <body> <?php $arrayName = array("data-2","data-1","data-3","data-4"); natsort($arrayName); print_r($arrayName); ?> </body> </html>
|
自然排序,是指natsort函数对字母、数字、字符串进行排序,并保持源于的键/值的关联即称之为自然排序
例子
计算并根据分数进行排序和提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| html> <html> <head> <meta charset="utf-8"> <title>demos</title> </head> <style type="text/css"> </style> <body> <?php echo "<form method=post>"; for($i=1;$i<6;$i++) { // 名字框的名字即数组名 echo "学生".$i."的分数为<input type=text name='stu[]'><br>"; } echo "<input type=submit name=sumb value='开始提交'>"; echo "</form>"; echo "<br>";
if (isset($_POST['sumb'])) { $sum = 0; // 总成绩初始化为0 $min = 0; // 分数小于60的人初始化为0 $stu = $_POST['stu']; // 取得所有分本框值并赋值给数组$stu $num = count($stu); // 计算数组$stu元素的个数 echo "本次总共录入的成绩有:<br>"; } foreach ($stu as $score) { // 循环遍历数组 $stu echo $score." "; // 输出数组的接收值 $sum = $sum + $score; // 计算总成绩 if ($score < 60) { // 判断分数小于 60 的情况 $sco[$min] = $score; // 将分数小于60的值赋给数组$min $min++; // 分数小于60的人数+1 } } rsort($stu); echo "<br><hr>成绩由高到低的排名如下:<br>";
foreach ($stu as $valuetwo) { echo $valuetwo." "; // 输出降序排列数据 echo "<br><hr>成绩低于60分的如下:<br>"; for ($min=0;$min < count('sco');$min++) // 使用for循环输出$sco数组 echo $sco[$min]." "; $average = $sum/$num; // 计算平均成绩 echo "<br><hr>总共平均分为:<br>$average"; // 输出平均成绩 echo "<hr>"; } ?> </body> </html>
|
| ID |
DA |
FA |
| array_keys |
输出数组中所有的键名 |
数值 |
| array_values |
输出数组中所有的数值 |
|
|
|
|
| array_unique |
移除数组中重复的值 |
|
|
|
|
| in_array |
检测键值是否存在 |
|
| array_key_exists |
检测键名是否存在 |
|
| array_search |
检测是否存在[^如果键值存在则返回键名,不存在则返回NULL] |
|
|
|
|
| sort() |
数组的升序[^重新排序,同时删除原来的键名,重新分配索引] |
排序的升序 |
| asort() |
数组的升序[^数组重新排序后仍然保持着键名与键值的关联] |
|
| ksort() |
数组的升序[^对数组的键名进行重新排序,排序后仍然保持着键名与键值的关联] |
|
|
|
|
| sort() |
数组的降序[^重新排序,同时删除原来的键名,重新分配索引] |
排序的降序 |
| arsort() |
数组的降序[^数组重新排序后仍然保持着键名与键值的关联] |
|
| krsort() |
数组的降序[^对数组的键名进行重新排序,排序后仍然保持着键名与键值的关联] |
|
|
|
|
| array_multisort() |
一次对多个或一个数组进行排序 |
数组的多排序 |
|
|
|
| shuffle() |
数组的重新排序[^删除原有的键名从而自动建立索引] |
数组的重新排序 |
| array_reverse() |
将数组按照相反的顺序进行排序[^如果参数为“TRUE”则保留原来的键值,但为“FALSE”参数则重新建立索引,默认为FALSE] |
|
|
|
|
| natsort() |
自然排序[^对字母、数字、字符串进行排序,并保持原来的键值关联即称之为“自然排序”] |
数组的自然排序 |
|
|
|
| list |
List主要的作用实现数组的循环遍历 |
循环 |
⬅️ Go back